﻿// 3553. 最长平衡串.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <unordered_map>


using namespace std;
/*
https://www.acwing.com/problem/content/3556/

给定一个只含 01 的字符串，找出它的最长平衡子串的长度。

如果一个 01字符串包含的 0和 1的个数相同，则称其为平衡串。

输入格式
一行，一个 01字符串。

输出格式
一个整数，表示结果。

数据范围
输入字符串的长度不超过 106。

输入样例：
101011000
输出样例：
8

01 

10
*/


const int N = 1000010;
int pre[N];
string str;

unordered_map<int, int> mm;

int ans;


int main()
{
	cin >> str;
	str.insert(str.begin(), '#');
	for (int i = 0; i < str.size(); i++) {
		if (str[i] == '1')
			pre[i] = pre[i - 1] + 1;
		else
			pre[i] = pre[i - 1];
	}

	//for (int i = 1; i < str.size(); i++) {
	//	for (int j = 0; j < i; j++) {
	//		if (2 * (pre[i] - pre[j]) == i - (j + 1) + 1) {
	//			ans = max(ans, i - (j + 1) + 1);
	//		}
	//	}
	//}

	for (int i = 0; i < str.size(); i++) {
		int val = i - 2*pre[i];
		if (mm.count(val)) {
			int len = i - mm[val];
			ans = max(ans, len);
		}
		else {
			mm[val] = i;
		}
	}


	cout << ans << endl;


	return 0;
}

 